{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "zvMMnXDiH7U5"
      },
      "source": [
        "# Stock Analysis Agents\n",
        "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/MervinPraison/PraisonAI/blob/main/cookbooks/notebooks/stock_analysis_agents.ipynb)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "BUtAfnnwH7U6"
      },
      "source": [
        "## Dependencies"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 53,
      "metadata": {
        "id": "zmweEwqsH7U6"
      },
      "outputs": [],
      "source": [
        "# Install dependencies without output\n",
        "%pip install langchain_community > /dev/null\n",
        "%pip install praisonai[crewai] > /dev/null\n",
        "%pip install duckduckgo-search > /dev/null\n",
        "%pip install sec-api > /dev/null\n",
        "%pip install embedchain > /dev/null\n",
        "%pip install html2text > /dev/null"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "j3ckhi4SH7U6"
      },
      "source": [
        "## Tools"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 67,
      "metadata": {
        "id": "W4pubD8FH7U6"
      },
      "outputs": [],
      "source": [
        "#ToDo: Add fix for the Output Error regarding BaseModel\n",
        "import os\n",
        "import re\n",
        "import requests\n",
        "import html2text\n",
        "from bs4 import BeautifulSoup\n",
        "from typing import Any, Optional, Type\n",
        "from pydantic import BaseModel, Field\n",
        "from praisonai_tools import BaseTool\n",
        "from sec_api import QueryApi\n",
        "from embedchain.models.data_type import DataType\n",
        "from langchain.tools import tool\n",
        "\n",
        "\n",
        "class FixedSEC10KToolSchema(BaseModel):\n",
        "    \"\"\"Input schema for SEC10KTool.\"\"\"\n",
        "    search_query: str = Field(\n",
        "        ..., description=\"The query string to search within the 10-K report content.\"\n",
        "    )\n",
        "\n",
        "\n",
        "class SEC10KTool(BaseTool):\n",
        "    name: str = \"SEC10KTool\"\n",
        "    description: str = \"Fetches and searches through the latest 10-K form content for a specified stock ticker.\"\n",
        "    args_schema: Type[BaseModel] = FixedSEC10KToolSchema\n",
        "\n",
        "    def __init__(self, stock_name: Optional[str] = None, **kwargs):\n",
        "        super().__init__(**kwargs)\n",
        "        if stock_name:\n",
        "            content = self.get_10k_url_content(stock_name)\n",
        "            if content:\n",
        "                self.add(content)\n",
        "                self.description = f\"Search within {stock_name}'s latest 10-K form content.\"\n",
        "\n",
        "    def get_10k_url_content(self, stock_name: str) -> Optional[str]:\n",
        "        \"\"\"Fetches the latest 10-K form for the specified stock ticker.\"\"\"\n",
        "        try:\n",
        "            queryApi = QueryApi(api_key=os.environ['SEC_API_API_KEY'])\n",
        "            query = {\n",
        "                \"query\": {\"query_string\": {\"query\": f\"ticker:{stock_name} AND formType:\\\"10-K\\\"\"}},\n",
        "                \"from\": \"0\",\n",
        "                \"size\": \"1\",\n",
        "                \"sort\": [{\"filedAt\": {\"order\": \"desc\"}}]\n",
        "            }\n",
        "            filings = queryApi.get_filings(query)['filings']\n",
        "            if not filings:\n",
        "                return None\n",
        "\n",
        "            url = filings[0]['linkToFilingDetails']\n",
        "            headers = {\"User-Agent\": \"crewai.com\", \"Accept-Encoding\": \"gzip, deflate\"}\n",
        "            response = requests.get(url, headers=headers)\n",
        "            response.raise_for_status()\n",
        "\n",
        "            text = html2text.HTML2Text().handle(response.text)\n",
        "            return re.sub(r\"[^a-zA-Z$0-9\\s\\n]\", \"\", text)\n",
        "        except requests.exceptions.RequestException as e:\n",
        "            return f\"Failed to fetch 10-K form: {e}\"\n",
        "        except Exception as e:\n",
        "            return f\"Error processing 10-K form content: {e}\"\n",
        "\n",
        "    def add(self, *args: Any, **kwargs: Any) -> None:\n",
        "        kwargs[\"data_type\"] = DataType.TEXT\n",
        "        super().add(*args, **kwargs)\n",
        "\n",
        "    def _run(self, search_query: str) -> str:\n",
        "        \"\"\"Searches through the 10-K form content.\"\"\"\n",
        "        return super()._run(query=search_query)\n",
        "\n",
        "\n",
        "class FixedSEC10QToolSchema(BaseModel):\n",
        "    \"\"\"Input schema for SEC10QTool.\"\"\"\n",
        "    search_query: str = Field(\n",
        "        ..., description=\"The query string to search within the 10-Q report content.\"\n",
        "    )\n",
        "\n",
        "\n",
        "class SEC10QTool(BaseTool):\n",
        "    name: str = \"SEC10QTool\"\n",
        "    description: str = \"Fetches and searches through the latest 10-Q form content for a specified stock ticker.\"\n",
        "    args_schema: Type[BaseModel] = FixedSEC10QToolSchema\n",
        "\n",
        "    def __init__(self, stock_name: Optional[str] = None, **kwargs):\n",
        "        super().__init__(**kwargs)\n",
        "        if stock_name:\n",
        "            content = self.get_10q_url_content(stock_name)\n",
        "            if content:\n",
        "                self.add(content)\n",
        "                self.description = f\"Search within {stock_name}'s latest 10-Q form content.\"\n",
        "\n",
        "    def get_10q_url_content(self, stock_name: str) -> Optional[str]:\n",
        "        \"\"\"Fetches the latest 10-Q form for the specified stock ticker.\"\"\"\n",
        "        try:\n",
        "            queryApi = QueryApi(api_key=os.environ['SEC_API_API_KEY'])\n",
        "            query = {\n",
        "                \"query\": {\"query_string\": {\"query\": f\"ticker:{stock_name} AND formType:\\\"10-Q\\\"\"}},\n",
        "                \"from\": \"0\",\n",
        "                \"size\": \"1\",\n",
        "                \"sort\": [{\"filedAt\": {\"order\": \"desc\"}}]\n",
        "            }\n",
        "            filings = queryApi.get_filings(query)['filings']\n",
        "            if not filings:\n",
        "                return None\n",
        "\n",
        "            url = filings[0]['linkToFilingDetails']\n",
        "            headers = {\"User-Agent\": \"crewai.com\", \"Accept-Encoding\": \"gzip, deflate\"}\n",
        "            response = requests.get(url, headers=headers)\n",
        "            response.raise_for_status()\n",
        "\n",
        "            text = html2text.HTML2Text().handle(response.text)\n",
        "            return re.sub(r\"[^a-zA-Z$0-9\\s\\n]\", \"\", text)\n",
        "        except requests.exceptions.RequestException as e:\n",
        "            return f\"Failed to fetch 10-Q form: {e}\"\n",
        "        except Exception as e:\n",
        "            return f\"Error processing 10-Q form content: {e}\"\n",
        "\n",
        "    def add(self, *args: Any, **kwargs: Any) -> None:\n",
        "        kwargs[\"data_type\"] = DataType.TEXT\n",
        "        super().add(*args, **kwargs)\n",
        "\n",
        "    def _run(self, search_query: str) -> str:\n",
        "        \"\"\"Searches through the 10-Q form content.\"\"\"\n",
        "        return super()._run(query=search_query)\n",
        "\n",
        "\n",
        "class ScrapeWebsiteTool(BaseTool):\n",
        "    name: str = \"WebContentReaderTool\"\n",
        "    description: str = \"Fetches and reads the main text content from a specified webpage URL.\"\n",
        "\n",
        "    def _run(self, url: str) -> str:\n",
        "        \"\"\"Reads the content of a webpage and returns up to 5000 characters of text.\"\"\"\n",
        "        try:\n",
        "            response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})\n",
        "            response.raise_for_status()\n",
        "            soup = BeautifulSoup(response.content, 'html.parser')\n",
        "            text_content = soup.get_text(separator=\"\\n\", strip=True)\n",
        "            return text_content[:5000]\n",
        "        except requests.exceptions.RequestException as e:\n",
        "            return f\"Failed to retrieve content from {url}: {e}\"\n",
        "\n",
        "\n",
        "class CalculatorTool():\n",
        "    @tool(\"Make a calculation\")\n",
        "    def calculate(operation: str) -> str:\n",
        "        \"\"\"Performs mathematical calculations. Accepts expressions like `200*7` or `5000/2*10`.\"\"\"\n",
        "        try:\n",
        "            return str(eval(operation))\n",
        "        except Exception as e:\n",
        "            return f\"Error: {e}\"\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5En-K8HZH7U6"
      },
      "source": [
        "## YAML Prompt"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 57,
      "metadata": {
        "id": "7CuZDDZmH7U6"
      },
      "outputs": [],
      "source": [
        "agent_yaml = \"\"\"\n",
        "framework: \"crewai\"\n",
        "topic: \"Automated Stock Analysis and Investment Recommendation\"\n",
        "roles:\n",
        "  financial_analyst:\n",
        "    role: \"The Best Financial Analyst\"\n",
        "    backstory: |\n",
        "      A seasoned financial analyst with deep expertise in stock market analysis and investment\n",
        "      strategies, working to impress a highly important customer.\n",
        "    goal: \"Deliver impressive financial data and market trends analysis.\"\n",
        "    tasks:\n",
        "      financial_analysis:\n",
        "        description: |\n",
        "          Conduct a thorough analysis of NVIDIA's financial health and market performance.\n",
        "          Examine key financial metrics such as P/E ratio, EPS growth, revenue trends, and debt-to-equity ratio.\n",
        "          Analyze the stock's performance relative to its industry peers and overall market trends.\n",
        "        expected_output: |\n",
        "          The final report must expand on the initial summary, providing a clear assessment of the stock's financial standing,\n",
        "          strengths and weaknesses, and comparison with competitors in the current market. Use the most recent data available.\n",
        "    tools:\n",
        "      - \"ScrapeWebsiteTool\"\n",
        "      - \"WebsiteSearchTool\"\n",
        "      - \"CalculatorTool\"\n",
        "      - \"SEC10QTool\"\n",
        "      - \"SEC10KTool\"\n",
        "\n",
        "  research_analyst:\n",
        "    role: \"Staff Research Analyst\"\n",
        "    backstory: |\n",
        "      Known as the top research analyst, skilled in interpreting data, tracking company news,\n",
        "      and uncovering market sentiments. Working on a critical analysis for an important client.\n",
        "    goal: \"Excel in gathering and interpreting data to impress the customer.\"\n",
        "    tasks:\n",
        "      research:\n",
        "        description: |\n",
        "          Collect and summarize recent news articles, press releases, and market analyses related to NVIDIA\n",
        "          and its industry. Pay attention to significant events, market sentiments, and analyst opinions.\n",
        "          Include upcoming events like earnings and others.\n",
        "        expected_output: |\n",
        "          A report that includes a comprehensive summary of recent news, notable shifts in market sentiment,\n",
        "          and potential impacts on the stock. Include the stock ticker as NVIDIA. Use the most current data available.\n",
        "    tools:\n",
        "      - \"ScrapeWebsiteTool\"\n",
        "      - \"SEC10QTool\"\n",
        "      - \"SEC10KTool\"\n",
        "\n",
        "  investment_advisor:\n",
        "    role: \"Private Investment Advisor\"\n",
        "    backstory: |\n",
        "      An experienced investment advisor who integrates various analytical insights to create strategic\n",
        "      investment advice, aiming to impress a highly important client.\n",
        "    goal: \"Provide a comprehensive analysis and investment recommendation for the customer.\"\n",
        "    tasks:\n",
        "      recommend:\n",
        "        description: |\n",
        "          Review and synthesize analyses from the Financial Analyst and Research Analyst. Combine these insights\n",
        "          into a comprehensive investment recommendation, considering all aspects, including financial health,\n",
        "          market sentiment, and qualitative data from EDGAR filings. Include insider trading activity and upcoming events like earnings.\n",
        "        expected_output: |\n",
        "          The final recommendation must be a super detailed report, offering a clear investment stance and strategy with supporting evidence.\n",
        "          Ensure it is well-formatted and visually appealing for the customer.\n",
        "    tools:\n",
        "      - \"ScrapeWebsiteTool\"\n",
        "      - \"WebsiteSearchTool\"\n",
        "      - \"CalculatorTool\"\n",
        "\n",
        "dependencies: []\n",
        "\"\"\""
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ukuRiMZdH7U7"
      },
      "source": [
        "## Main"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 66,
      "metadata": {
        "id": "Mtwl6CxtH7U7",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 426
        },
        "outputId": "a992f12c-b9b1-4d13-ecf8-8afc21e12bfd"
      },
      "outputs": [
        {
          "output_type": "error",
          "ename": "PydanticInvalidForJsonSchema",
          "evalue": "Cannot generate a JsonSchema for core_schema.CallableSchema\n\nFor further information visit https://errors.pydantic.dev/2.9/u/invalid-for-json-schema",
          "traceback": [
            "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
            "\u001b[0;31mPydanticInvalidForJsonSchema\u001b[0m              Traceback (most recent call last)",
            "\u001b[0;32m<ipython-input-66-7f38a30eac17>\u001b[0m in \u001b[0;36m<cell line: 14>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     13\u001b[0m \u001b[0;31m# Run PraisonAI\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 14\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpraisonai\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     15\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     16\u001b[0m \u001b[0;31m# Print the result\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/praisonai/cli.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    110\u001b[0m         \u001b[0mRun\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mPraisonAI\u001b[0m \u001b[0mapplication\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    111\u001b[0m         \"\"\"\n\u001b[0;32m--> 112\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmain\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    113\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    114\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mmain\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/praisonai/cli.py\u001b[0m in \u001b[0;36mmain\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    256\u001b[0m                 \u001b[0mtools\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtools\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    257\u001b[0m             )\n\u001b[0;32m--> 258\u001b[0;31m             \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0magents_generator\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate_crew_and_kickoff\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    259\u001b[0m             \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    260\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/praisonai/agents_generator.py\u001b[0m in \u001b[0;36mgenerate_crew_and_kickoff\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    247\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtool_class\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtype\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0missubclass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtool_class\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mBaseTool\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    248\u001b[0m                     \u001b[0mtool_name\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtool_class\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 249\u001b[0;31m                     \u001b[0mtools_dict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mtool_name\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtool_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    250\u001b[0m                     \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlogger\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdebug\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Added tool: {tool_name}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    251\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m<ipython-input-65-a35313a75a80>\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, stock_name, **kwargs)\u001b[0m\n\u001b[1;32m     80\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     81\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstock_name\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mOptional\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 82\u001b[0;31m         \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     83\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mstock_name\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     84\u001b[0m             \u001b[0mcontent\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_10q_url_content\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstock_name\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "    \u001b[0;31m[... skipping hidden 1 frame]\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/crewai_tools/tools/base_tool.py\u001b[0m in \u001b[0;36mmodel_post_init\u001b[0;34m(self, _BaseTool__context)\u001b[0m\n\u001b[1;32m     40\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     41\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mmodel_post_init\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m__context\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mAny\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 42\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_generate_description\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     43\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     44\u001b[0m         \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel_post_init\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m__context\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/crewai_tools/tools/base_tool.py\u001b[0m in \u001b[0;36m_generate_description\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m     86\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_generate_description\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     87\u001b[0m         \u001b[0margs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 88\u001b[0;31m         \u001b[0;32mfor\u001b[0m \u001b[0marg\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mattribute\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margs_schema\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"properties\"\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     89\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0;34m\"type\"\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mattribute\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     90\u001b[0m                 \u001b[0margs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"{arg}: '{attribute['type']}'\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/main.py\u001b[0m in \u001b[0;36mschema\u001b[0;34m(cls, by_alias, ref_template)\u001b[0m\n\u001b[1;32m   1356\u001b[0m             \u001b[0;34m'The `schema` method is deprecated; use `model_json_schema` instead.'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcategory\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mPydanticDeprecatedSince20\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1357\u001b[0m         )\n\u001b[0;32m-> 1358\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mcls\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodel_json_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mby_alias\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mby_alias\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mref_template\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mref_template\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1359\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1360\u001b[0m     \u001b[0;34m@\u001b[0m\u001b[0mclassmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/main.py\u001b[0m in \u001b[0;36mmodel_json_schema\u001b[0;34m(cls, by_alias, ref_template, schema_generator, mode)\u001b[0m\n\u001b[1;32m    474\u001b[0m             \u001b[0mThe\u001b[0m \u001b[0mJSON\u001b[0m \u001b[0mschema\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mgiven\u001b[0m \u001b[0mmodel\u001b[0m \u001b[0;32mclass\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    475\u001b[0m         \"\"\"\n\u001b[0;32m--> 476\u001b[0;31m         return model_json_schema(\n\u001b[0m\u001b[1;32m    477\u001b[0m             \u001b[0mcls\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mby_alias\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mby_alias\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mref_template\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mref_template\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mschema_generator\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mschema_generator\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    478\u001b[0m         )\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mmodel_json_schema\u001b[0;34m(cls, by_alias, ref_template, schema_generator, mode)\u001b[0m\n\u001b[1;32m   2278\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2279\u001b[0m     \u001b[0;32massert\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcls\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__pydantic_core_schema__\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_mock_val_ser\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mMockCoreSchema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'this is a bug! please report it'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2280\u001b[0;31m     \u001b[0;32mreturn\u001b[0m \u001b[0mschema_generator_instance\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcls\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__pydantic_core_schema__\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2281\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2282\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mgenerate\u001b[0;34m(self, schema, mode)\u001b[0m\n\u001b[1;32m    413\u001b[0m             )\n\u001b[1;32m    414\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 415\u001b[0;31m         \u001b[0mjson_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate_inner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    416\u001b[0m         \u001b[0mjson_ref_counts\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_json_ref_counts\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjson_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    417\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mgenerate_inner\u001b[0;34m(self, schema)\u001b[0m\n\u001b[1;32m    550\u001b[0m             \u001b[0mcurrent_handler\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_schema_generation_shared\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mGenerateJsonSchemaHandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnew_handler_func\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    551\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 552\u001b[0;31m         \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcurrent_handler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    553\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    554\u001b[0m             \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpopulate_defs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjson_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_schema_generation_shared.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, core_schema)\u001b[0m\n\u001b[1;32m     35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     36\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcore_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mCoreSchemaOrField\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m/\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     39\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mresolve_ref_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmaybe_ref_json_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mnew_handler_func\u001b[0;34m(schema_or_field, current_handler, js_modify_function)\u001b[0m\n\u001b[1;32m    525\u001b[0m                 \u001b[0mjs_modify_function\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mGetJsonSchemaFunction\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mjs_modify_function\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    526\u001b[0m             ) -> JsonSchemaValue:\n\u001b[0;32m--> 527\u001b[0;31m                 \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mjs_modify_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcurrent_handler\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    528\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    529\u001b[0m                     \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpopulate_defs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjson_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/main.py\u001b[0m in \u001b[0;36m__get_pydantic_json_schema__\u001b[0;34m(cls, core_schema, handler)\u001b[0m\n\u001b[1;32m    695\u001b[0m             \u001b[0mA\u001b[0m \u001b[0mJSON\u001b[0m \u001b[0mschema\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0ma\u001b[0m \u001b[0mPython\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    696\u001b[0m         \"\"\"\n\u001b[0;32m--> 697\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mhandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    698\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    699\u001b[0m     \u001b[0;34m@\u001b[0m\u001b[0mclassmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_schema_generation_shared.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, core_schema)\u001b[0m\n\u001b[1;32m     35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     36\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcore_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mCoreSchemaOrField\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m/\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     39\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mresolve_ref_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmaybe_ref_json_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mnew_handler_func\u001b[0;34m(schema_or_field, current_handler, js_modify_function)\u001b[0m\n\u001b[1;32m    525\u001b[0m                 \u001b[0mjs_modify_function\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mGetJsonSchemaFunction\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mjs_modify_function\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    526\u001b[0m             ) -> JsonSchemaValue:\n\u001b[0;32m--> 527\u001b[0;31m                 \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mjs_modify_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcurrent_handler\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    528\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    529\u001b[0m                     \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpopulate_defs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjson_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_generate_schema.py\u001b[0m in \u001b[0;36mmodify_model_json_schema\u001b[0;34m(schema_or_field, handler, cls, title)\u001b[0m\n\u001b[1;32m    270\u001b[0m     \u001b[0mBaseModel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mimport_cached_base_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    271\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 272\u001b[0;31m     \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    273\u001b[0m     \u001b[0moriginal_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mhandler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresolve_ref_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjson_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    274\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mtitle\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_schema_generation_shared.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, core_schema)\u001b[0m\n\u001b[1;32m     35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     36\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcore_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mCoreSchemaOrField\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m/\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     39\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mresolve_ref_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmaybe_ref_json_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mhandler_func\u001b[0;34m(schema_or_field)\u001b[0m\n\u001b[1;32m    509\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema_field\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    510\u001b[0m                     \u001b[0mgenerate_for_schema_type\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_schema_type_to_method\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'type'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 511\u001b[0;31m                     \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgenerate_for_schema_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    512\u001b[0m                 \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    513\u001b[0m                     \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf'Unexpected schema type: schema={schema_or_field}'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mmodel_schema\u001b[0;34m(self, schema)\u001b[0m\n\u001b[1;32m   1413\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1414\u001b[0m         \u001b[0;32mwith\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_config_wrapper_stack\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpush\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconfig\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1415\u001b[0;31m             \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate_inner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'schema'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1416\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1417\u001b[0m         \u001b[0mjson_schema_extra\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mconfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'json_schema_extra'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mgenerate_inner\u001b[0;34m(self, schema)\u001b[0m\n\u001b[1;32m    550\u001b[0m             \u001b[0mcurrent_handler\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_schema_generation_shared\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mGenerateJsonSchemaHandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnew_handler_func\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    551\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 552\u001b[0;31m         \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcurrent_handler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    553\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    554\u001b[0m             \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpopulate_defs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjson_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_schema_generation_shared.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, core_schema)\u001b[0m\n\u001b[1;32m     35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     36\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcore_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mCoreSchemaOrField\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m/\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     39\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mresolve_ref_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmaybe_ref_json_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mhandler_func\u001b[0;34m(schema_or_field)\u001b[0m\n\u001b[1;32m    509\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema_field\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    510\u001b[0m                     \u001b[0mgenerate_for_schema_type\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_schema_type_to_method\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'type'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 511\u001b[0;31m                     \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgenerate_for_schema_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    512\u001b[0m                 \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    513\u001b[0m                     \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf'Unexpected schema type: schema={schema_or_field}'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mmodel_fields_schema\u001b[0;34m(self, schema)\u001b[0m\n\u001b[1;32m   1508\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'serialization'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1509\u001b[0m             \u001b[0mnamed_required_fields\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_name_required_computed_fields\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'computed_fields'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1510\u001b[0;31m         \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_named_required_fields_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnamed_required_fields\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1511\u001b[0m         \u001b[0mextras_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mschema\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'extras_schema'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1512\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mextras_schema\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36m_named_required_fields_schema\u001b[0;34m(self, named_required_fields)\u001b[0m\n\u001b[1;32m   1316\u001b[0m                 \u001b[0mname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_alias_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfield\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1317\u001b[0m             \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1318\u001b[0;31m                 \u001b[0mfield_json_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate_inner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfield\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1319\u001b[0m             \u001b[0;32mexcept\u001b[0m \u001b[0mPydanticOmit\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1320\u001b[0m                 \u001b[0;32mcontinue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mgenerate_inner\u001b[0;34m(self, schema)\u001b[0m\n\u001b[1;32m    550\u001b[0m             \u001b[0mcurrent_handler\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_schema_generation_shared\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mGenerateJsonSchemaHandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnew_handler_func\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    551\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 552\u001b[0;31m         \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcurrent_handler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    553\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    554\u001b[0m             \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpopulate_defs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjson_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_schema_generation_shared.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, core_schema)\u001b[0m\n\u001b[1;32m     35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     36\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcore_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mCoreSchemaOrField\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m/\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     39\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mresolve_ref_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmaybe_ref_json_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mnew_handler_func\u001b[0;34m(schema_or_field, current_handler, js_modify_function)\u001b[0m\n\u001b[1;32m    543\u001b[0m                 \u001b[0mjs_modify_function\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mGetJsonSchemaFunction\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mjs_modify_function\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    544\u001b[0m             ) -> JsonSchemaValue:\n\u001b[0;32m--> 545\u001b[0;31m                 \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mjs_modify_function\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcurrent_handler\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    546\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    547\u001b[0m                     \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpopulate_defs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjson_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_generate_schema.py\u001b[0m in \u001b[0;36mjson_schema_update_func\u001b[0;34m(core_schema_or_field, handler)\u001b[0m\n\u001b[1;32m   2467\u001b[0m         \u001b[0mcore_schema_or_field\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mCoreSchemaOrField\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhandler\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mGetJsonSchemaHandler\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2468\u001b[0m     ) -> JsonSchemaValue:\n\u001b[0;32m-> 2469\u001b[0;31m         \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mhandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore_schema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mjson_schema_update\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2470\u001b[0m         \u001b[0madd_json_schema_extra\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjson_schema\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjson_schema_extra\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2471\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mjson_schema\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_schema_generation_shared.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, core_schema)\u001b[0m\n\u001b[1;32m     35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     36\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcore_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mCoreSchemaOrField\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m/\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     39\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mresolve_ref_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmaybe_ref_json_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mhandler_func\u001b[0;34m(schema_or_field)\u001b[0m\n\u001b[1;32m    509\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema_field\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    510\u001b[0m                     \u001b[0mgenerate_for_schema_type\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_schema_type_to_method\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'type'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 511\u001b[0;31m                     \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgenerate_for_schema_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    512\u001b[0m                 \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    513\u001b[0m                     \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf'Unexpected schema type: schema={schema_or_field}'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mmodel_field_schema\u001b[0;34m(self, schema)\u001b[0m\n\u001b[1;32m   1384\u001b[0m             \u001b[0mThe\u001b[0m \u001b[0mgenerated\u001b[0m \u001b[0mJSON\u001b[0m \u001b[0mschema\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1385\u001b[0m         \"\"\"\n\u001b[0;32m-> 1386\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate_inner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'schema'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1387\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1388\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mcomputed_field_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mschema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mcore_schema\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mComputedField\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mgenerate_inner\u001b[0;34m(self, schema)\u001b[0m\n\u001b[1;32m    550\u001b[0m             \u001b[0mcurrent_handler\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_schema_generation_shared\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mGenerateJsonSchemaHandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnew_handler_func\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    551\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 552\u001b[0;31m         \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcurrent_handler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    553\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    554\u001b[0m             \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpopulate_defs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjson_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_schema_generation_shared.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, core_schema)\u001b[0m\n\u001b[1;32m     35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     36\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcore_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mCoreSchemaOrField\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m/\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     39\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mresolve_ref_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmaybe_ref_json_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mhandler_func\u001b[0;34m(schema_or_field)\u001b[0m\n\u001b[1;32m    509\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema_field\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    510\u001b[0m                     \u001b[0mgenerate_for_schema_type\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_schema_type_to_method\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'type'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 511\u001b[0;31m                     \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgenerate_for_schema_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    512\u001b[0m                 \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    513\u001b[0m                     \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf'Unexpected schema type: schema={schema_or_field}'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mdefault_schema\u001b[0;34m(self, schema)\u001b[0m\n\u001b[1;32m   1040\u001b[0m             \u001b[0mThe\u001b[0m \u001b[0mgenerated\u001b[0m \u001b[0mJSON\u001b[0m \u001b[0mschema\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1041\u001b[0m         \"\"\"\n\u001b[0;32m-> 1042\u001b[0;31m         \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate_inner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'schema'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1043\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1044\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0;34m'default'\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mschema\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mgenerate_inner\u001b[0;34m(self, schema)\u001b[0m\n\u001b[1;32m    550\u001b[0m             \u001b[0mcurrent_handler\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_schema_generation_shared\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mGenerateJsonSchemaHandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnew_handler_func\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    551\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 552\u001b[0;31m         \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcurrent_handler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    553\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    554\u001b[0m             \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpopulate_defs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjson_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_schema_generation_shared.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, core_schema)\u001b[0m\n\u001b[1;32m     35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     36\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcore_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mCoreSchemaOrField\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m/\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     39\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mresolve_ref_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmaybe_ref_json_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mhandler_func\u001b[0;34m(schema_or_field)\u001b[0m\n\u001b[1;32m    509\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema_field\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    510\u001b[0m                     \u001b[0mgenerate_for_schema_type\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_schema_type_to_method\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'type'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 511\u001b[0;31m                     \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgenerate_for_schema_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    512\u001b[0m                 \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    513\u001b[0m                     \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf'Unexpected schema type: schema={schema_or_field}'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mnullable_schema\u001b[0;34m(self, schema)\u001b[0m\n\u001b[1;32m   1103\u001b[0m         \"\"\"\n\u001b[1;32m   1104\u001b[0m         \u001b[0mnull_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m{\u001b[0m\u001b[0;34m'type'\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;34m'null'\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1105\u001b[0;31m         \u001b[0minner_json_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate_inner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'schema'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1106\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1107\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0minner_json_schema\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mnull_schema\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mgenerate_inner\u001b[0;34m(self, schema)\u001b[0m\n\u001b[1;32m    550\u001b[0m             \u001b[0mcurrent_handler\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_schema_generation_shared\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mGenerateJsonSchemaHandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnew_handler_func\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    551\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 552\u001b[0;31m         \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcurrent_handler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    553\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    554\u001b[0m             \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpopulate_defs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjson_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_schema_generation_shared.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, core_schema)\u001b[0m\n\u001b[1;32m     35\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     36\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcore_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mCoreSchemaOrField\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m/\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 37\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandler\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcore_schema\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     38\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     39\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mresolve_ref_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmaybe_ref_json_schema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mhandler_func\u001b[0;34m(schema_or_field)\u001b[0m\n\u001b[1;32m    509\u001b[0m                 \u001b[0;32mif\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0m_core_utils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_core_schema_field\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    510\u001b[0m                     \u001b[0mgenerate_for_schema_type\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_schema_type_to_method\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'type'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 511\u001b[0;31m                     \u001b[0mjson_schema\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgenerate_for_schema_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema_or_field\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    512\u001b[0m                 \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    513\u001b[0m                     \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf'Unexpected schema type: schema={schema_or_field}'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mcallable_schema\u001b[0;34m(self, schema)\u001b[0m\n\u001b[1;32m    833\u001b[0m             \u001b[0mThe\u001b[0m \u001b[0mgenerated\u001b[0m \u001b[0mJSON\u001b[0m \u001b[0mschema\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    834\u001b[0m         \"\"\"\n\u001b[0;32m--> 835\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandle_invalid_for_json_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mschema\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'core_schema.CallableSchema'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    836\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    837\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mlist_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mschema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mcore_schema\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mListSchema\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/pydantic/json_schema.py\u001b[0m in \u001b[0;36mhandle_invalid_for_json_schema\u001b[0;34m(self, schema, error_info)\u001b[0m\n\u001b[1;32m   2183\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2184\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0mhandle_invalid_for_json_schema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mschema\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mCoreSchemaOrField\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0merror_info\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0mJsonSchemaValue\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2185\u001b[0;31m         \u001b[0;32mraise\u001b[0m \u001b[0mPydanticInvalidForJsonSchema\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf'Cannot generate a JsonSchema for {error_info}'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2186\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2187\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0memit_warning\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mJsonSchemaWarningKind\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdetail\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
            "\u001b[0;31mPydanticInvalidForJsonSchema\u001b[0m: Cannot generate a JsonSchema for core_schema.CallableSchema\n\nFor further information visit https://errors.pydantic.dev/2.9/u/invalid-for-json-schema"
          ]
        }
      ],
      "source": [
        "import os\n",
        "from praisonai import PraisonAI\n",
        "from google.colab import userdata\n",
        "\n",
        "# Create a PraisonAI instance with the agent_yaml content\n",
        "praisonai = PraisonAI(agent_yaml=agent_yaml, tools=[ScrapeWebsiteTool, WebsiteSearchTool,\n",
        "                                                    CalculatorTool, SEC10QTool, SEC10KTool])\n",
        "\n",
        "# Add OPENAI_API_KEY Secrets to Google Colab on the Left Hand Side 🔑 or Enter Manually Below\n",
        "os.environ[\"OPENAI_API_KEY\"] = userdata.get('OPENAI_API_KEY') or \"ENTER OPENAI_API_KEY HERE\"\n",
        "os.environ[\"OPENAI_MODEL_NAME\"] = \"gpt-5-nano\"\n",
        "\n",
        "# Run PraisonAI\n",
        "result = praisonai.run()\n",
        "\n",
        "# Print the result\n",
        "print(result) # 10/10\n"
      ]
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "i1oqgQ0_AdID"
      },
      "execution_count": null,
      "outputs": []
    }
  ],
  "metadata": {
    "language_info": {
      "name": "python"
    },
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}